home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
DDJMAG
/
DDJ8801.ZIP
/
SHAMLST.ZIP
/
SHAMLST.JAN
Wrap
Text File
|
1980-01-01
|
5KB
|
247 lines
Listing One. Example for declaring various objects that are variations of stack structures
PROGRAM Test_Objects(input,output);
{ Simple example for objects using TML Pascal running on a Mac Plus }
TYPE RealStackReg = ARRAY [1..4] OF real;
IntStackReg = ARRAY [1..4] OF integer;
{ define common stack-related variables and routines }
TStack = OBJECT
height : integer;
ErrorFlag : boolean;
PROCEDURE TStack.IStack;
PROCEDURE TStack.Inc(VAR i : integer);
PROCEDURE TStack.Dec(VAR i : integer);
END;
{ define a 4-register real-typed stack }
TRealStack = OBJECT(TStack)
Regs : RealStackReg;
PROCEDURE Push(Item : real);
FUNCTION Pop : real;
PROCEDURE Add;
END;
{ define a 4-register real-typed stack with automatic LastX register }
THPStack = OBJECT(TRealStack)
LastX : real;
PROCEDURE Add; OVERRIDE;
END;
{ define a 4-register integer-typed stack }
TIntStack = OBJECT(TStack)
Regs : IntStackReg;
PROCEDURE Push(Item : integer);
FUNCTION Pop : integer;
PROCEDURE Add;
END;
PROCEDURE TStack.IStack;
{ Initialize TStack objects by setting the Stack height to zero }
BEGIN
height := 0
END; { Stack.IStack }
PROCEDURE TStack.Inc(VAR i : integer);
BEGIN
i := i + 1;
END;
PROCEDURE TStack.Dec(VAR i : integer);
BEGIN
i := i - 1;
END;
PROCEDURE TRealStack.Push(Item : real);
VAR i : integer;
BEGIN
Inc(height);
FOR i := 4 DOWNTO 2 DO
Regs[i] := Regs[i-1];
Regs[1] := Item;
END; { RealStack.Push }
FUNCTION TRealStack.Pop : real;
VAR i : integer;
BEGIN
IF height > 0 THEN BEGIN
Pop := Regs[1];
FOR i := 1 TO 3 DO
Regs[i] := Regs[i+1];
Dec(height);
ErrorFlag := FALSE;
END
ELSE BEGIN
Pop := 1.0E+30;
ErrorFlag := TRUE
END;
END; { TRealStack.Pop }
PROCEDURE TRealStack.Add;
VAR i : integer;
BEGIN
Regs[1] := Regs[1] + Regs[2];
FOR i := 2 TO 3 DO
Regs[i] := Regs[i+1];
END; { TRealStack.Add }
PROCEDURE THPStack.Add;
VAR i : integer;
BEGIN
LastX := Regs[1];
Regs[1] := Regs[1] + Regs[2];
FOR i := 2 TO 3 DO
Regs[i] := Regs[i+1];
END;{ THPStack.Add }
PROCEDURE TIntStack.Push(Item : integer);
VAR i : integer;
BEGIN
Inc(height);
FOR i := 4 DOWNTO 2 DO
Regs[i] := Regs[i-1];
Regs[1] := Item;
END; { TIntStack.Push }
FUNCTION TIntStack.Pop : integer;
VAR i : integer;
BEGIN
IF height > 0 THEN BEGIN
Pop := Regs[1];
FOR i := 1 TO 3 DO
Regs[i] := Regs[i+1];
Dec(height);
ErrorFlag := FALSE
END
ELSE BEGIN
Pop := -32767;
ErrorFlag := TRUE
END;
END; { TIntStack.Pop }
PROCEDURE TIntStack.Add;
VAR i : integer;
BEGIN
Regs[1] := Regs[1] + Regs[2];
FOR i := 2 TO 3 DO
Regs[i] := Regs[i+1];
END; { TIntStack.Add }
{ ---------------- declarations of variables ------------------- }
VAR RealStack : TRealStack;
IntStack : TIntStack;
{ HPStack : THPStack; }
X : real;
I : integer;
ch : char;
BEGIN
NEW(RealStack);
NEW(IntStack);
NEW(HPStack);
{ exercise real-type stack }
RealStack.IStack;
RealStack.Push(1.0);
RealStack.Push(2.0);
RealStack.Push(3.0);
RealStack.Push(4.0);
RealStack.Add;
X := RealStack.Pop;
WRITELN('X = ',X); WRITELN;
{ use HPStack }
HPStack.IStack;
HPStack.Push(0.0);
HPStack.Push(0.0);
HPStack.Push(3.0);
HPStack.Push(4.0);
INHERITED HPStack.Add;
X := HPStack.Pop;
WRITELN('X = ',X);
WRITELN('LastX = ',HPStack.LastX);
WRITELN;
{ exercise integer-type stack }
IntStack.IStack;
IntStack.Push(1);
IntStack.Push(2);
IntStack.Push(3);
IntStack.Push(4);
IntStack.Add;
I := IntStack.Pop;
WRITELN('I = ',I); WRITELN;
readln(ch);
END.
CONST MAX_MENU = 20;
TYPE STRING80 = STRING[80];
String_Array = ARRAY [0..MAX+MENU] OF STRING80;
Menu_Range = 0..MAX_MENU;
TMenu = OBJECT
{ declare instance variables }
Menu_Options : String_Array;
Num_Options,
Menu_Choice : Menu_Range;
END;
TItem_Menu = OBJECT(TMenu)
PROCEDURE Display_Menu;
FUNCTION Get_Choice : Menu_Range;
END;
TControl_Item_Menu = OBJECT(TMenu);
Current_Level : Menu_Range;
PROCEDURE Display_Menu;
FUNCTION Get_Choice : Menu_Range;
END;
TMain_Pull_Down = OBJECT(TMenu)
PROCEDURE Display_Menu;
FUNCTION Get_Choice : Menu_Range;
END;
TPull_Down = OBJECT(TMenu)
Hot_Key_Char : ARRAY [0.MAX_MENU] OF CHAR;
Location : ARRAY [0.MAX_MENU] OF INTEGER;
Attribute : ARRAY [0.MAX_MENU] OF BYTE;
Active : ARRAY [0.MAX_MENU] OF BOOLEAN;
PROCEDURE Display_Menu;
FUNCTION Get_Choice : Menu_Range;
END;
Example 1: Declaration of object types for various kinds of menus